from win32com.client import gencache
from win32com.client import constants, gencache
import os

#创建PDF
def createPdf(wordPath, pdfPath):
    """
    word转pdf
    :param wordPath: word文件路径
    :param pdfPath:  生成pdf文件路径
    """
    word = gencache.EnsureDispatch('Word.Application')
    doc = word.Documents.Open(wordPath, ReadOnly=1)
    doc.ExportAsFixedFormat(pdfPath,
                            constants.wdExportFormatPDF,
                            Item=constants.wdExportDocumentWithMarkup,
                            CreateBookmarks=constants.wdExportCreateHeadingBookmarks)
    word.Quit(constants.wdDoNotSaveChanges)

#遍历当前目录，并把Word文件转换为PDF
def wordToPdf():
    
    # 获取当前运行路径
    path = os.getcwd()
    # 获取所有文件名的列表
    filename_list = os.listdir(path)
    # 获取所有word文件名列表
    wordname_list = [filename for filename in filename_list \
                        if filename.endswith((".doc", ".docx"))]

    total = len(wordname_list)
    if total == 0:
        print("当前目录下没有 Word 文档！")
        print("请将本程序放在存放 Word 文档的目录中，然后运行本程序。")
        print("")
        return
    
    print(f"在当前目录下总共找到 {total} 个 Word 文档。")
    print("正在转换中...")
    print("-"*50)
    ok_count = 0
    fail_count = 0
    exist_count = 0
    for i in range(total):
        wordname = wordname_list[i]
        print(f"{i+1}/{total}\t{int((i+1)/total*100)}%\t{wordname}\t", end=' ')
        
        # 分离word文件名称和后缀，转化为pdf名称
        pdfname = os.path.splitext(wordname)[0] + '.pdf'
        # 如果当前word文件对应的pdf文件存在，则不转化
        if pdfname in filename_list:
            print("文件已存在")
            exist_count += 1
            continue
        # 拼接 路径和文件名
        wordpath = os.path.join(path, wordname)
        pdfpath = os.path.join(path, pdfname)
        try:
            createPdf(wordpath,pdfpath)
            print("成功")
            ok_count += 1
        except:
            print("失败")
            fail_count += 1
            
    print("-"*50)
    print("转换完成！")
    print(f"| 总共: {total} | 成功: {ok_count} | 失败: {fail_count} | 跳过：{exist_count} |")
    print("")

#word转pdf
if __name__ == '__main__':
    print("欢迎使用「Word 转 PDF 神器」！")
    print("版本：v1.0")
    print("作者：yowfung")
    print("日期：2020/11/05")
    print("-"*50)
    wordToPdf()
    os.system("pause")